package com.web.kftsdk.entity;

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.NotBlank;

import java.util.Map;

/**
 * <p>Title: KppRefundReq</p>
 * <p>Description: TODO</p>
 *
 * @author xukk
 * @version 1.0
 * @date 2018/6/14
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class KppRefundReq extends BaseReq {
    /**
     * 参数名称:商户身份ID
     * 可否为空：否
     * 参数描述：签约快付通的唯一用户编号,最长20位纯数字组成的字符
     */
    @NotBlank
    private String merchantId;

    /**
     * 参数名称:二级商户ID
     * 可否为空：是
     * 参数描述：一级商户下的二级子商户号，调用“二级商户入驻接口”生成。
     */
    private String secMerchantId;

    /**
     * 参数名称:订单编号
     * 可否为空：否
     * 参数描述：用于标识商户发起的一笔交易,
     */
    @NotBlank
    private String orderNo;

    /**
     * 参数名称:原订单编号
     * 可否为空：否
     * 参数描述：用于标识是哪一笔交发起了退款
     */
    @NotBlank
    private String originalOrderNo;

    /**
     * 参数名称:商品描述
     * 可否为空：否
     * 参数描述：由商户填写,简要概括此次交易的内容.
     */
    @NotBlank
    private String tradeName;

    /**
     * 参数名称:商户方交易时间
     * 可否为空：否
     * 参数描述：此次交易在商户发发起的时间,注意此时间取值一般为商户方系统时间而非快付通生成此时间
     */
    @NotBlank
    private String tradeTime;

    /**
     * 参数名称:交易金额
     * 可否为空：否
     * 参数描述：此次交易的具体金额,单位:分,不支持小数点
     */
    @NotBlank
    private String amount;

    /**
     * 参数名称:币种
     * 可否为空：否
     * 参数描述：指定交易所使用的币种
     */
    @NotBlank
    private String currency;

    /**
     * 参数名称:备注
     * 可否为空：可空
     * 参数描述：商户可额外填写备注信息,此信息会传给银行,会在银行的账单信息中显示(具体如何显示取决于银行方,快付通不保证银行肯定能显示)
     */
    private String remark;

    /**
     * 参数名称:是否担保
     * 可否为空：可空
     * 参数描述：是否担保交易，1：是;0：否。默认否。与isS0互斥
     */
    private String isGuarantee;

    /**
     * 参数名称:是否分账
     * 可否为空：可空
     * 参数描述：是否分账交易，1：是;0：否。默认否。
     */
    private String isSplit;

    /**
     * 参数名称:分账详情
     * 可否为空：可空
     * 参数描述：如果是分账交易必填。示例：[{\"merchantId\":\"000010001000000161\",\"amount\":\"100\",\"remark\":\"有线电视费\"},
     */
    private String splitInfo;

    @Override
    public Map toMap(String service) {
        Map<String,String> map= super.toMap(service);
        map.put("merchantId",merchantId);
        map.put("secMerchantId",secMerchantId);
        map.put("orderNo",orderNo);
        map.put("originalOrderNo",originalOrderNo);
        map.put("tradeName",tradeName);
        map.put("tradeTime",tradeTime);
        map.put("amount",amount);
        map.put("currency",currency);
        map.put("remark",remark);
        map.put("isGuarantee",isGuarantee);
        map.put("isSplit",isSplit);
        map.put("splitInfo",splitInfo);
        return map;
    }
}
